<%-- 
    Document   : Import
    Created on : Dec 7, 2011, 4:03:55 PM
    Author     : alex
--%>

<%@page import="org.xml.sax.SAXException"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="manufacturerBean.ManufacturerHome"%>
<%@page import="manufacturerBean.Manufacturer"%>
<%@page import="categoryBean.Category"%>
<%@page import="categoryBean.CategoryHome"%>
<%@page import="goodsBean.GoodsHome"%>
<%@page import="goodsBean.Goods"%>
<%@page import="DBConnection.ATeamObject"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.Collection"%>
<%@page import="javax.rmi.PortableRemoteObject"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="sessionBean.Session"%>
<%@page import="sessionBean.SessionHome"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.DataInputStream"%>
<%@page import="java.io.PrintWriter"%>
<%@page import="java.io.File"%>
<%@ page errorPage = "Error.jsp" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Импорт данных</title>
        <style type="text/css">
                    .block1 {
                    background: #e3e5fa;
                    padding: 5px;
                    padding-right: 20px;
                    }
                    .block2 {
                    background: #c7c9e7;
                    padding: 5px;
                    }
                    #head { /* Верхний блок */
        background: #333; /* Цвет фона */
        padding: 5px; /* Поля вокруг текста */
        color: #fff; /* Цвет текста */
        clear: both; /* Отменяем обтекание */
        }
        h1 {
        font-size: 36px; /* Размер шрифта */
        font-weight: bold; /* Жирное начертание */
        margin: 0; /* Убираем отступы */
        color: #fff; /* Цвет текста */
        }
        #foot { /* Нижний блок */
        background: #333; /* Цвет фона */
        padding: 5px; /* Поля вокруг текста */
        color: #fff; /* Цвет текста */
        clear: both; /* Отменяем обтекание */
        }
        </style>
    </head>
    <body background="1.jpg" bgproperties="fixed">
        <div id="head">
            <center>
            <h1>Импорт данных</h1>
            </center>
        </div>
        <%  
            String message = "Файл загружен успешно!";
            String path = "";
            String err = "Ошибка при чтении файла - файл неопределен";
            response.setContentType ("text/html;charset=windows-1251");

            String contentType = request.getContentType ();
            DataInputStream dis = new DataInputStream(request.getInputStream());

            int length = request.getContentLength();
            byte array[] = new byte[length];
            int dataRead = 0, totalData = 0;

            while (totalData < length){
                    dataRead = dis.read(array, totalData, length);
                    totalData += dataRead;
            }

            String data = new String(array);
            int lastIndex = contentType.lastIndexOf("=");
            String boundary = contentType.substring (lastIndex + 1,
                    contentType.length());

            int position = data.indexOf("filename=\"");
            int pz_s = position + 10;
            position = data.indexOf("\n", position) + 1;
            int pz_e = position - 4;

            String FileName = "";


            if ((pz_s > 0) && (pz_s < pz_e))
            {
                    FileName = "moved";
                    char[] c = new char[pz_e - pz_s + 1];
                    for (int i = pz_s; i <= pz_e; i++)
                            c[i - pz_s] = data.charAt(i);
                    FileName = String.valueOf(c, 0, c.length);
                    pz_s = FileName.indexOf('\\');
                    while (pz_s > 0)
                    {
                            FileName = FileName.substring (pz_s + 1,
                                    FileName.length());
                            pz_s = FileName.indexOf('\\');
                    }
            }

            if (FileName.length() > 0)
            {
                    position = data.indexOf("\n", position) + 1;
                    position = data.indexOf("\n", position) + 1;
                    String fileData = data.substring(position, data.indexOf(
                            boundary, position) - 4);
                    if (fileData.length() > 0)
                    {
                            path = application.getRealPath("/") + FileName;
                            FileOutputStream fos = new FileOutputStream(path);
                            fos.write (array, position, fileData.length());
                            fos.close();
                    }else
                            message = err;
            }else
                    message = err;
            dis.close ();                
            //out.println ("<h3>" + message+ "</h3>");
            //out.println ("<h3>" + path+ "</h3>");  

            Object homeSessionObject;
            SessionHome sessionHome;
            Session sessionObject;

            GoodsHome goodsHome;
            Goods goods;
            Object homeObject;

            CategoryHome categoryHome;
            Category category;
            Object homeObject1;

            Manufacturer manufacturer;
            ManufacturerHome manufacturerHome;
            Object homeObject2;

            InitialContext initialContext = new InitialContext();
            homeSessionObject = initialContext.lookup("SessionBean");
            sessionHome = (SessionHome)PortableRemoteObject.narrow(
                homeSessionObject,SessionHome.class);

            homeObject = initialContext.lookup("GoodsBean");
            goodsHome = (GoodsHome) PortableRemoteObject.narrow(homeObject,
                    GoodsHome.class);

            homeObject1 = initialContext.lookup("CategoryBean");
            categoryHome = (CategoryHome) PortableRemoteObject.narrow(
                    homeObject1, CategoryHome.class);

            homeObject2 = initialContext.lookup("ManufacturerBean");
            manufacturerHome = (ManufacturerHome) PortableRemoteObject.narrow(
                    homeObject2,ManufacturerHome.class);

            sessionObject = sessionHome.create();
            Collection[] importResult=null;
            try{
                importResult = sessionObject.importFile(path);
            } catch(Exception ex) {
                throw new SAXException();
            }
            Collection result = importResult[0];
            Collection result2 = importResult[1];  

            Collection resolvableCategory = new ArrayList();
            Collection resolvableManufacturer = new ArrayList();
            Collection resolvableGoods = new ArrayList();                

            Collection unresolvableCategory = new ArrayList();
            Collection unresolvableManufacturer = new ArrayList();
            Collection unresolvableGoods = new ArrayList();

            Iterator iterator = result.iterator();
            while(iterator.hasNext()){
                ATeamObject ato  = (ATeamObject)iterator.next();
                if(ato.getTypeOfObject() == 1){
                    resolvableCategory.add(ato);
                }
                if(ato.getTypeOfObject() == 2){
                    resolvableManufacturer.add(ato);
                }
                if(ato.getTypeOfObject() == 4){
                    resolvableGoods.add(ato);
                }
            }

            Map resolvableProblem = new HashMap();
            iterator = result.iterator();
            while(iterator.hasNext()){
                ATeamObject ato = (ATeamObject)iterator.next();
                Integer id = new Integer(ato.getObjectId());
                resolvableProblem.put(id, ato);
            }
            request.getSession().setAttribute("resolvableProblem",
                    resolvableProblem);

            iterator = result2.iterator();
            while(iterator.hasNext()){
                ATeamObject ato  = (ATeamObject)iterator.next();
                if(ato.getTypeOfObject() == 1){
                    unresolvableCategory.add(ato);
                }
                if(ato.getTypeOfObject() == 2){
                    unresolvableManufacturer.add(ato);
                }
                if(ato.getTypeOfObject() == 4){
                    unresolvableGoods.add(ato);
                }
            }
        %>
        <h4>
            <a href="index.jsp">Главная</a>
        </h4>
        <h2>Разрешимые конфликты</h2>
        <form action="ApplyImport.jsp" method="post">
            <% if(!resolvableCategory.isEmpty()) { %>
            <h3>Категории</h3>
            <table border="1">
                <tr>
                    <th>Заменить</th>
                    <th>Данные XML</th>
                    <th>Данные из базы</th>
                </tr>
                <%
                    iterator = resolvableCategory.iterator();
                    while(iterator.hasNext()){
                       ATeamObject ato = (ATeamObject)iterator.next(); %>
                <tr>
                    <TD align="center"><input type="checkbox" name="updateObject" value="<%= ato.getObjectId() %>"/></TD>
                    <td bgcolor="#e3e5fa">
                        <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                    </td>
                    <% category = categoryHome.findByPrimaryKey(ato.getObjectId()); %>
                    <td bgcolor="#c7c9e7">
                        <p><font face="Arial"><b>Ид: </b></font> <%= category.getObjectId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= category.getName() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= category.getCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= category.getLastModifyDate() %></p>
                    </td>
                </tr>    
                <% } %>
            </table>

            <% }

            if(!resolvableManufacturer.isEmpty()) { %>
            <h3>Производители</h3>
            <table border="1">
                <tr>
                    <th>Заменить</th>
                    <th>Данные XML</th>
                    <th>Данные из базы</th>
                </tr>
                <%
                    iterator = resolvableManufacturer.iterator();
                    while(iterator.hasNext()){
                       ATeamObject ato = (ATeamObject)iterator.next(); %>
                <tr>
                    <TD align="center"><input type="checkbox" name="updateObject" value="<%= ato.getObjectId() %>"/></TD>
                    <td bgcolor="#e3e5fa">
                        <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                    </td>
                    <% manufacturer = manufacturerHome.findByPrimaryKey(ato.getObjectId()); %>
                    <td bgcolor="#c7c9e7">
                        <p><font face="Arial"><b>Ид: </b></font> <%= manufacturer.getObjectId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= manufacturer.getName() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= manufacturer.getCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= manufacturer.getLastModifyDate() %></p>
                    </td>
                </tr>    
                <% } %>
            </table>

            <% }

            if(!resolvableGoods.isEmpty()) { %>
            <h3>Товары</h3>
            <table border="1">
                <tr>
                    <th>Заменить</th>
                    <th>Данные XML</th>
                    <th>Данные из базы</th>
                </tr>
                <%
                    iterator = resolvableGoods.iterator();
                    while(iterator.hasNext()){
                       ATeamObject ato = (ATeamObject)iterator.next(); %>
                <tr>
                    <TD align="center"><input type="checkbox" name="updateObject" value="<%= ato.getObjectId() %>"/></TD>
                    <td bgcolor="#e3e5fa">
                        <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                        <p><font face="Arial"><b>Ид Категории: </b></font> <%= ato.getParentId() %></p>
                        <p><font face="Arial"><b>Цена: </b></font> <%= ato.getPrice() %></p>
                        <p><font face="Arial"><b>Количество: </b></font> <%= ato.getNumber() %></p>
                    </td>
                    <% goods = goodsHome.findByPrimaryKey(ato.getObjectId()); %>
                    <td bgcolor="#c7c9e7">
                        <p><font face="Arial"><b>Ид: </b></font> <%= goods.getGoodsId() %></p>
                        <p><font face="Arial"><b>Имя: </b></font> <%= goods.getNameOfGoods() %></p>
                        <p><font face="Arial"><b>Дата создания: </b></font> <%= goods.getGoodsCreateDate() %></p>
                        <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= goods.getGoodsLastModifyDate() %></p>
                        <p><font face="Arial"><b>Ид Категории: </b></font> <%= goods.getCategoryId() %></p>
                        <p><font face="Arial"><b>Цена: </b></font> <%= goods.getPrice() %></p>
                        <p><font face="Arial"><b>Количество: </b></font> <%= goods.getNumber() %></p>
                    </td>
                </tr>
                <% } %>
            </table>
            <% } %>
            <br>
            <center>
                <button type="submit" name="accept" style="width:150px;height:55px">
                    Подтвердить
                </button>
            </center>
        </form>
       
       <%   if(!result2.isEmpty()) {
       %>
            <h2><font color="red">Неразрешимые конфликты</font></h2>
       <%
            iterator = unresolvableCategory.iterator();
            boolean color = true;
            while(iterator.hasNext()){
                ATeamObject ato = (ATeamObject)iterator.next();
                if(color){
                    color = !color;
       %>
                     <p><div class="block1">
       <%       } else {
                    color = !color;
       %>
                    <p><div class="block2">
          <%    } %>
                                <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                                <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                                <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                                <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                     </div>            
       <%    
            } 
            
            iterator = unresolvableManufacturer.iterator();
            while(iterator.hasNext()){
                ATeamObject ato = (ATeamObject)iterator.next();
                if(color){
                    color = !color;
      %>
                     <p><div class="block1">
      <%        } else {
                    color = !color;
      %>
                    <p><div class="block2">
      <%        } %>
                                <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                                <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                                <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                                <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                       </div>
      <%   
            }
            
            iterator = unresolvableGoods.iterator();            
            while(iterator.hasNext()){
                ATeamObject ato = (ATeamObject)iterator.next();
                if(color){
                    color = !color;
      %>
                     <p><div class="block1">
      <%        } else {
                    color = !color;
      %>
                    <p><div class="block2">
      <%        } %>
                            <p><font face="Arial"><b>Ид: </b></font> <%= ato.getObjectId() %></p>
                            <p><font face="Arial"><b>Имя: </b></font> <%= ato.getName() %></p>
                            <p><font face="Arial"><b>Дата создания: </b></font> <%= ato.getCreateDate() %></p>
                            <p><font face="Arial"><b>Дата последнего изменения: </b></font> <%= ato.getLastModifyDate() %></p>
                            <p><font face="Arial"><b>Ид Категории: </b></font> <%= ato.getParentId() %></p>
                            <p><font face="Arial"><b>Цена: </b></font> <%= ato.getPrice() %></p>
                            <p><font face="Arial"><b>Количество: </b></font> <%= ato.getNumber() %></p>
                     </div>          
      <%    } 
            }
      %>
        <div id="foot">
        База данных магазина &copy; 2011-2012 
        </div>
    </body>
</html>
